﻿using System;

#if NET_2_0
namespace SimpleUnitity.Net4
{
    #region Tuple
    public static class Tuple
    {
        public static Tuple<T1> Create<T1>(T1 item1)
        {
            return new Tuple<T1>(item1);
        }

        public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2)
        {
            return new Tuple<T1, T2>(item1, item2);
        }

        public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3)
        {
            return new Tuple<T1, T2, T3>(item1, item2, item3);
        }

        public static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4)
        {
            return new Tuple<T1, T2, T3, T4>(item1, item2, item3, item4);
        }

        public static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
        {
            return new Tuple<T1, T2, T3, T4, T5>(item1, item2, item3, item4, item5);
        }

        public static Tuple<T1, T2, T3, T4, T5, T6> Create<T1, T2, T3, T4, T5, T6>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
        {
            return new Tuple<T1, T2, T3, T4, T5, T6>(item1, item2, item3, item4, item5, item6);
        }

        public static Tuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
        {
            return new Tuple<T1, T2, T3, T4, T5, T6, T7>(item1, item2, item3, item4, item5, item6, item7);
        }
    } 
    #endregion

    #region Tuple<T1>
    public class Tuple<T1>
    {

        public Tuple(T1 item1)
        {
            this.item1 = item1;
        }

        private readonly T1 item1;

        public T1 Item1
        {
            get { return item1; }
        }
    } 
    #endregion

    #region Tuple<T1, T2>
    public class Tuple<T1, T2>
    {

        public Tuple(T1 item1, T2 item2)
        {
            this.item1 = item1;
            this.item2 = item2;
        }

        private readonly T1 item1;

        public T1 Item1
        {
            get { return item1; }
        }

        private readonly T2 item2;

        public T2 Item2
        {
            get { return item2; }
        }

    } 
    #endregion

    #region Tuple<T1, T2, T3>
    public class Tuple<T1, T2, T3>
    {

        public Tuple(T1 item1, T2 item2, T3 item3)
        {
            this.item1 = item1;
            this.item2 = item2;
            this.item3 = item3;
        }

        private readonly T1 item1;

        public T1 Item1
        {
            get { return item1; }
        }

        private readonly T2 item2;

        public T2 Item2
        {
            get { return item2; }
        }

        private readonly T3 item3;

        public T3 Item3
        {
            get { return item3; }
        } 


    }
    #endregion

    #region Tuple<T1, T2, T3, T4>
    public class Tuple<T1, T2, T3, T4>
    {

        public Tuple(T1 item1, T2 item2, T3 item3, T4 item4)
        {
            this.item1 = item1;
            this.item2 = item2;
            this.item3 = item3;
            this.item4 = item4;
        }

        private readonly T1 item1;

        public T1 Item1
        {
            get { return item1; }
        }

        private readonly T2 item2;

        public T2 Item2
        {
            get { return item2; }
        }

        private readonly T3 item3;

        public T3 Item3
        {
            get { return item3; }
        }


        private readonly T4 item4;

        public T4 Item4
        {
            get { return item4; }
        } 


    }
    #endregion

    #region Tuple<T1, T2, T3, T4, T5>
    public class Tuple<T1, T2, T3, T4, T5>
    {

        public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
        {
            this.item1 = item1;
            this.item2 = item2;
            this.item3 = item3;
            this.item4 = item4;
            this.item5 = item5;
        }

        private readonly T1 item1;

        public T1 Item1
        {
            get { return item1; }
        }

        private readonly T2 item2;

        public T2 Item2
        {
            get { return item2; }
        }

        private readonly T3 item3;

        public T3 Item3
        {
            get { return item3; }
        }


        private readonly T4 item4;

        public T4 Item4
        {
            get { return item4; }
        }

        private readonly T5 item5;

        public T5 Item5
        {
            get { return item5; }
        } 



    }
    #endregion

    #region Tuple<T1, T2, T3, T4, T5, T6>
    public class Tuple<T1, T2, T3, T4, T5, T6>
    {

        public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
        {
            this.item1 = item1;
            this.item2 = item2;
            this.item3 = item3;
            this.item4 = item4;
            this.item5 = item5;
            this.item6 = item6;
        }

        private readonly T1 item1;

        public T1 Item1
        {
            get { return item1; }
        }

        private readonly T2 item2;

        public T2 Item2
        {
            get { return item2; }
        }

        private readonly T3 item3;

        public T3 Item3
        {
            get { return item3; }
        }


        private readonly T4 item4;

        public T4 Item4
        {
            get { return item4; }
        }

        private readonly T5 item5;

        public T5 Item5
        {
            get { return item5; }
        }

        private readonly T6 item6;

        public T6 Item6
        {
            get { return item6; }
        } 


    }
    #endregion

    #region Tuple<T1, T2, T3, T4, T5, T6, T7>
    public class Tuple<T1, T2, T3, T4, T5, T6, T7>
    {

        public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
        {
            this.item1 = item1;
            this.item2 = item2;
            this.item3 = item3;
            this.item4 = item4;
            this.item5 = item5;
            this.item6 = item6;
            this.item7 = item7;
        }

        private readonly T1 item1;

        public T1 Item1
        {
            get { return item1; }
        }

        private readonly T2 item2;

        public T2 Item2
        {
            get { return item2; }
        }

        private readonly T3 item3;

        public T3 Item3
        {
            get { return item3; }
        }


        private readonly T4 item4;

        public T4 Item4
        {
            get { return item4; }
        }

        private readonly T5 item5;

        public T5 Item5
        {
            get { return item5; }
        }

        private readonly T6 item6;

        public T6 Item6
        {
            get { return item6; }
        }

        private readonly T7 item7;

        public T7 Item7
        {
            get { return item7; }
        } 


    }
    #endregion
}
#endif